package al.work.dataserialize.buildserial;

/**
 * @author JiuZh
 */
public interface i_stream_helper {
    /**
     * 序列化读入流
     */
    public interface i_in_stream {
        /**
         * 获取一个int8类型的数据
         * @return null 为 失败
         */
        Byte read_int_8();
        /**
         * 获取一个uint8类型的数据
         * @return
         */
        Short read_uint_8();
        /**
         * 获取一个int16类型的数据
         * @return
         */
        Short read_int_16();
        /**
         * 获取一个uint16类型的数据
         * @return
         */
        Integer read_uint_16();
        /**
         * 获取一个int32类型的数据
         * @return
         */
        Integer read_int_32();
        /**
         * 获取一个uint32类型的数据
         * @return
         */
        Long read_uint_32();
        /**
         * 获取一个int64类型的数据
         * @return
         */
        Long read_int_64();
        /**
         * 获取一个float类型的数据
         * @return
         */
        Float read_float();
        /**
         * 获取一个double类型的数据
         * @return
         */
        Double read_double();
        /**
         * 获取一段字节数组
         * @param data
         * @return
         */
        boolean read_bytes(byte[] data);
        /**
         * 获取一段字节数组，从index开始写入
         * @param data
         * @param index
         * @return
         */
        boolean read_bytes(byte[] data, int index);
        /**
         * 获取一段字节数组，从index开始写入，并写入count
         * @param data
         * @param index
         * @param count
         * @return
         */
        boolean read_bytes(byte[] data, int index, int count);

        /**
         * 生成一个子序列化输入流对象，需要count长度
         * @param count
         * @return
         */
        i_in_stream child_stream(int count);
    }

    /**
     * 序列化输出流
     */
    public interface i_out_stream {
        /**
         * 写入一个int8类型的数据
         * @param data
         * @return
         */
         boolean write_int_8(byte data);
        /**
         * 写入一个uint8类型的数据
         * @param data
         * @return
         */
        boolean write_uint_8(short data);
        /**
         * 写入一个int16类型的数据
         * @param data
         * @return
         */
        boolean write_int_16(short data);
        /**
         * 写入一个uint16类型的数据
         * @param data
         * @return
         */
        boolean write_uint_16(int data);
        /**
         * 写入一个int32类型的数据
         * @param data
         * @return
         */
        boolean write_int_32(int data);
        /**
         * 写入一个uint32类型的数据
         * @param data
         * @return
         */
        boolean write_uint_32(long data);
        /**
         * 写入一个int64类型的数据
         * @param data
         * @return
         */
        boolean write_int_64(long data);
        /**
         * 写入一个float类型的数据
         * @param data
         * @return
         */
        boolean write_float(float data);
        /**
         * 写入一个double类型的数据
         * @param data
         * @return
         */
        boolean write_double(double data);
        /**
         * 写入一段字节数组
         * @param data
         * @return
         */
        boolean write_bytes(byte[] data);
        /**
         * 写入一段字节数组,从index开始的所有
         * @param data
         * @param index
         * @return
         */
        boolean write_bytes(byte[] data, int index);
        /**
         * 写入一段字节数组，从index开始的count个
         * @param data
         * @param index
         * @param count
         * @return
         */
        boolean write_bytes(byte[] data, int index, int count);
    }
}
